function SingletonCD (contexte) {
//===========================
// "extension" de Singleton : CD = contextual dependent
// au choix 
//    un seul exemplaire possible 
//    ou un seul exemplaire mais par contexte

    // fonction ? executer comme m?thode propre d'une classe, en t?te de son constructeur
    // pour que cette classe b?n?ficie du mod?le de conception du Singleton	
// modele Singleton "par espace de d?finition (= contexte)"
if (contexte) {    
    if (this.constructor.prototype.nbInstances == undefined)
            this.constructor.prototype.nbInstances = new Array;
    if (this.constructor.prototype.nbInstances[contexte] == undefined) 
            this.constructor.prototype.nbInstances[contexte] = 0;
    if (this.constructor.prototype.nbInstances[contexte] != 0)
//  inutile    return window.objects.singletonCDs[contexte][this];
      return rialto.session.objects.singletonCDs[contexte];
      
    else {
        this.constructor.prototype.nbInstances[contexte]++;
        if (rialto.session.objects == undefined) 
            rialto.session.objects = new Object;
        if (rialto.session.objects.singletonCDs == undefined) 
            rialto.session.objects.singletonCDs = new Array;
        if (rialto.session.objects.singletonCDs[contexte] == undefined)
            rialto.session.objects.singletonCDs[contexte] = new Object;
            
//  inutile      window.objects.singletonCDs[contexte][this] = this ;
        rialto.session.objects.singletonCDs[contexte] = this ;
        return null;
    }
}
// modele Singleton "pur"
else {
    if (this.constructor.prototype.nbInstances == undefined)
            this.constructor.prototype.nbInstances = 0;
    
    if (this.constructor.prototype.nbInstances != 0)
      return rialto.session.objects[this];
      
    else {
        this.constructor.prototype.nbInstances++;
        if (rialto.session.objects == undefined){rialto.session.objects = new Array;}
        rialto.session.objects[this] = this ;
        return null;
    }
}

}

function recupSingletonCD (ctxt) {
//==============================
// pour tenter de simplifier (?) l'usage de la fonction Singleton	
return 'this.recupInst = SingletonCD;  this.recupInst(\''+ctxt+'\'); '
}
function recupSingleton () {
//========================
// pour tenter de simplifier (?) l'usage de la fonction Singleton	
return 'this.recupInst = SingletonCD;  this.recupInst(); '
}


function classTestCD (ctxt) {
//=========================	
// d?monstration de l'usage de la fonction recupSingleton;  placement en t?te du constructeur indispensable
alert('ctxt= '+ctxt);
if (instanceUnique = eval (recupSingletonCD(ctxt))) 
   return instanceUnique;


// suite du constructeur de la classe
alert('creation de l\' unique objet, instance de classTestCD dans le contexte '+ctxt);

this.id= 'ID_InstanceUniqueClassTestCD_'+ ctxt;

}

function classTestCD2 (ctxt) {
//==========================	
// d?monstration de l'usage de la fonction Singleton; placement en t?te du co,nstructeur indispensable
this.recupInst = SingletonCD;
if (instDejaCree = this.recupInst(ctxt))
  return instDejaCree;
  
// suite du constructeur de la classe
alert('creation de l\' unique objet, instance de classTestCD2 dans le contexte '+ctxt);

this.id= 'ID_instanceUniqueClassTestCD2_' + ctxt;
  
}

classTestCD.prototype = new classTestCD3;

function classTestCD3 () {
  this.attr1 = 'essai derivation';
}

